package com.epalmpay.service.weixin;

import com.epalmpay.entity.MemberICCardInfo;
import com.epalmpay.util.Response;
import com.epalmpay.exception.ApplicationException;

public interface IWxApiIcCardService {
	
	/**
	 * 根据实体卡号查询实体卡信息
	 * 如果有记录，就返回memberIcCardInfo
	 * 如果没有记录，就返回null 
	 * @param icCardNo
	 * @return
	 */
	public MemberICCardInfo selectIcCardByIcCardNo(String icCardNo);

	/**
	 * 根据传入的实体卡卡号和密码，
	 * 到后天查找，并检查这个卡号是否存在，以及密码是否正确
	 * @param icCardNo 实体卡号
	 * @param icCardPwd 实体卡密码
	 * @return
	 * @throws ApplicationException
	 */
	public boolean selectAndCheckIcCardPwd(String icCardNo,String icCardPwd) throws ApplicationException ;
	
	/**
	 * 根据实体卡卡号验证实体卡状态
	 * @param icCardNo
	 * @return
	 */
	public boolean selectIcCardStatus(String icCardNo);
	
	/**
	 * 传入实体卡号，会员ID
	 * 去绑定实体卡
	 * 改入会员ID，更改状态为已绑定，改入绑定时间，改启用状态
	 * 把初始面额和会员钱包余额相加，但不更改实体卡初始面额
	 * @param icCardNo
	 * @param memberId
	 * @return
	 */
	public Response updatePinlessIcCard(String icCardNo,String memberId) throws ApplicationException;
	
	/**
	 * 根据会员ID查找是否有绑定的实体卡，
	 * 有的话判断实体卡状态
	 * @param memberId
	 * @return
	 * @throws ApplicationException
	 */
	public MemberICCardInfo selectIcCardByMemberId(String memberId) throws ApplicationException;
	
	/**
	 * 传入会员ID,实体卡编号，实体卡状态
	 * 对实体卡进行挂失
	 * @param memberId
	 * @param icCardNo
	 * @param status
	 * @param switchNo 0：挂失，1：取消挂失
	 * @return
	 * @throws ApplicationException
	 */
	public Response updateIcCardStatus(String icCardNo, String targetSwitchStatus, String targetStatus,String switchNo) throws ApplicationException;
	
	/**
	 * 根据会员ID，查找到该会员是否有挂失的实体卡
	 * 如果有，就返回这条记录
	 * 如果没有，就返回null
	 * @param memberId
	 * @return MemberICCardInfo
	 * @throws ApplicationException
	 */
	public MemberICCardInfo selectIcCardTimeOut(Long memberId) throws ApplicationException;
	
	/**
	 * 传入实体卡号，新密码
	 * 对实体卡进行改密
	 * @param icCardNo
	 * @param newIcCardPwd
	 * @return
	 * @throws ApplicationException
	 */
	public Response updateIcCardPwd(String icCardNo,String newIcCardPwd) throws ApplicationException;
	
}
